#include <linux/init.h>
#include <linux/sched.h>
#include <linux/printk.h>
#include <linux/sched/task.h>
#include <linux/delay.h>

static int dl_task(void *p)
{
    struct sched_attr attr = {};

    attr.size = sizeof(attr);
    attr.sched_policy = SCHED_DEADLINE;  // 使用deadline调度策略
    attr.sched_runtime = 10 * 1000 * 1000;  // 运行时间10ms (以纳秒为单位)
    attr.sched_deadline = 20 * 1000 * 1000;  // 截止时间20ms (以纳秒为单位)
    attr.sched_period = 20 * 1000 * 1000;  // 周期20ms (以纳秒为单位)

    sched_setattr_nocheck(current, &attr);

    while (1)
    {
        msleep(1000);
    }
    return 0;
}

#include <msh/export.h>

static int dl(void)
{
    kernel_thread(dl_task, NULL, "dl", 0);

    return 0;
}
MSH_CMD_EXPORT(dl, dl task init);
